#ifndef __AES_H
#define __AES_H


#ifdef __cplusplus
extern "C" {
#endif 

//#include "stm32f10x.h"	
#include "stdint.h"

typedef uint8_t		u8;
typedef uint16_t	u16;
typedef uint32_t	u32;


/*
多字节加密
pInDa: 输入数据
ulLen：输入字节长度
pOutDa：加密或解密后的输出数据
pKey： 默认16字节长的秘钥

实际这种函数形式是不安全的，
即如果外部ulLen，超过了外部定义，则

*/
void aes_encrypt_multi(unsigned char * pInDa, unsigned long ulLen, unsigned char * pKey);



/*
多字节解密
pInDa: 输入数据
ulLen：输入字节长度
pOutDa：加密或解密后的输出数据
pKey： 默认16字节长的秘钥
*/
void aes_decrypt_multi(unsigned char * pInDa, unsigned long ulLen, unsigned char * pKey);


void obd_aes_encr(u8 * pDa, u16 len);
void obd_aes_decr(u8 * pDa, u16 len);
/*
8字节的AA加密得出BB
用于OBD验证Tbox时，Tbox产生密文
*/
void crypt_aa2bb(u8 *pA, u8 * pB);
/*
算法验证通过PA计算等否得出PB
正确返回0，
失败返回1
*/
u8 chk_obd_aa_bb(u8 *pA, u8 * pB);

/*
8字节CC计算得出DD
用于Tbox加密后发给OBD
*/
void crypt_cc2dd(u8 *pA, u8 * pB);

/*
算法验证通过PA计算等否得出PB
属于OBD验证Tbox的合法性
正确返回0，
失败返回1
*/
u8 chk_obd_cc_dd(u8 *pA, u8 * pB);





#ifdef __cplusplus
}
#endif


#endif



